# 多任务异步协程
import asyncio
import time

'''
async def fun():
    print('Hello, My name is 索菲亚')


if __name__ == '__main__':
    g = fun()  # 此时的函数是异步协程函数，此时函数执行得到的是一个协程对象
    asyncio.run(g)  # 协程程序运行需要 asyncio 模块的支持
'''


async def fun1():
    print('Hello, My name is 索菲亚1 doing······')
    await asyncio.sleep(3)  # 异步操作的代码
    print('索菲亚1：GoodBey Baby!')


async def fun2():
    print('Hello, My name is 索菲亚2 doing······')
    await asyncio.sleep(2)  # 异步操作的代码
    print('索菲亚2：GoodBey Baby!')


async def fun3():
    print('Hello, My name is 索菲亚3 doing······')
    await asyncio.sleep(4)  # 异步操作的代码
    print('索菲亚3：GoodBey Baby!')


async def fun4():
    print('Hello, My name is 索菲亚4 doing······')
    await asyncio.sleep(5)  # 异步操作的代码
    print('索菲亚4：GoodBey Baby!')


async def main():
    # 第一种写法
    # f1 = fun1()
    # await f1  # 一般 await 挂起操作，放在协程对象前面，

    # 第二种写法（推荐）
    tasks = [
        asyncio.create_task(fun1()),
        asyncio.create_task(fun2()),
        asyncio.create_task(fun3())
    ]
    await asyncio.wait(tasks)


if __name__ == '__main__':
    t1 = time.time()
    asyncio.run(main())
    print('共耗时：', time.time() - t1)
